import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
// 若要存储全局状态，只需在定义state里面定义一个变量。
// 本store采用了命名空间，利用'common/getXxx'在页面组件中获取该变量，利用'common/setXxx'在页面组件中赋值给变量。
const state = {
    nodePropsInfo: {
        params: [],
        relations: [],
        tabs: []
    },
    canvasLoading: false,
    univariateData: {},
    selectedField: [],
    analysisReportData: null,
    excuteMegs: JSON.parse(localStorage.getItem('excuteMegs') || '[]'),
    clickNode: '',
    removeCanvasExp: '',
    removeExp: '',
    editableTabs: [],
    headerBack: null,
    dataOriginsTables: [],
    schemas: [],
    dataTables: [], // 已有数据表
    dataOrigins: [], // 数据源
    previewData: {
        cols: null,
        fileSize: null,
        records: [],
        schema: []
    }, // 数据预览
    newExp: null, // 新增实验id存储，也做标记用
    projectList: [], // 项目列表
    updateModel: null, // 手动更新画布左侧数据列表
    updateDataTable: null, // 手动更新画布左侧模型列表
    runingStatus: {
        state: 0
    }, // 实验的状态和内部节点的状态
    evaluationData: {}, // 根据概率和样本变化设置指标数据
    type: 0, // 选择概率和选择样本切换控制0或1
    probability: 0, // 概率
    sample: 0, // 样本
    modelDetail: {}, // 模型弹窗信息
    nodeData: {}, // 点击画布中的每个节点，右侧表单获取数据
    projectId: '', // 项目id
    showNodeProp: false, // 隐藏表单属性
    currentExpInfo: {}, // 获取当前实验的数据信息
    typeId: 0, // 实验编辑器实验/数据/组件/模型，切换时候需要传给后端的id
    canvasInfo: {}, // 当前实验下画布信息
    nodeMap: {}, // 画布节点信息
    linkMap: {}, // 画布连线信息
    nodePortMapper: {}, // 画布连接点映射
    experimentId: '', // 当前实验的id
    currentProjectInfo: {}, // 获取当前项目信息
    updateExp: null, // 监听实验列表删除
    changedNodes: {}, // 节点属性改变之后影响的画布中的节点状态
    errorLogs: null, // 节点错误日志
    showOps: localStorage.getItem('showOps'), // 运维中心切换
    dispatchInfo: {}
}
const getters = {}
const mutations = {}
for (const key in state) {
    const val = `${key[0].toUpperCase()}${key.slice(1)}`
    getters[`get${val}`] = state => {
        return state[key]
    }
    mutations[`set${val}`] = (state, data) => {
        state[key] = data
    }
}
let common = {
    namespaced: true,
    state,
    getters,
    mutations
}
export default new Vuex.Store({
    modules: {
        common
    }
})
